# define _CRT_SECURE_NO_WARNINGS 1；
/*
		负责人：羊小孩
			功能：	右方向进行填补
					填补完成后随机生成一个2或4
			参数：
			返回值	void
	*/
#include<stdio.h>
int map[4][4] = { 1,0,0,4,4,0,1,0,0,1,0,0 };
void fillD()
{
	int(*p)[4] = map;
	int i;
	for( i = 0 ;i < 4; i++)											 //循环单排化		
	{//0
		if(*(p[i]+3)==0)//第四个元素为0
		{//1
			if(*(p[i]+2)==0)//第四个元素为0第三个元素为0
			{//2
				if(*(p[i]+1)==0)//第四个元素为0第三个元素为0第二个元素为0
				{//3
					if(*(p[i])==0)//第四个元素为0第三个元素为0第二个元素为0第一个元素为0
					{//4
						;
					}//4
					else//第四个元素为0第三个元素为0第二个元素为0第一个元素不为0
					{//4 4
						*(p[i] + 3) = *(p[i]);
						*(p[i]) = 0;													//把第一个元素给第四个第一个变为0
					}//4 4
				}//3
				else//第四个元素为0第三个元素为0第二个元素不为0
				{//3 3
					*(p[i] + 3) = *(p[i] + 1);
					*(p[i] + 1) = 0;												//二给四二变为0
					if(*(p[i])==0)//第四个元素为0第三个元素为0第二个元素不为0第一个元素为0
					{//5
						;
					}//5
					else//第四个元素为0第三个元素为0第二个元素不为0第一个元素不为0
					{//5 5
						*(p[i] + 2) = *(p[i]);
						*(p[i]) = 0;												//一给三一变为0
					}//5 5
				}//3 3
			}//2
			else//第四个元素为0第三个元素不为0
			{//2 2
				*(p[i] + 3) = *(p[i] + 2);
				*(p[i] + 2) = 0;										//三给四三变为0
				if(*(p[i]+1)==0)//第四个元素为0第三个元素不为0第二个元素为0
				{//6
					if(*p[i]==0)//第四个元素为0第三个元素不为0第二个元素为0第一个元素为0
					{//7
						;
					}//7
					else//第四个元素为0第三个元素不为0第二个元素为0第一个元素不为0
					{//7 7
						*(p[i] + 2) = *p[i];
						*p[i] = 0;									//一给三一变0
					}//7 7
				}//6
				else//第四个元素为0第三个元素不为0第二个元素不为0
				{//6 6
					*(p[i] + 2) = *(p[i] + 1);
					*(p[i] + 1) = 0;//二给三二变0
					if(*p[i]==0) // 第四个元素为0第三个元素不为0第二个元素不为0第一个元素为0
					{//8
						;
					}//8
					else// 第四个元素为0第三个元素不为0第二个元素不为0第一个元素不为0
					{//8 8
						*(p[i] + 1) = *p[i];
						*p[i] = 0;									//一给二一变0
					}//8 8
				}//6 6
			}//2 2
		}//1
		else//第四个元素不为0
		{//1 1
			if(*(p[i]+2)==0)//第四个元素不为0第三个元素为0
			{//9
				if(*(p[i] + 1)==0)//第四个元素不为0第三个元素为0第二个元素为0
				{//10
					if(*p[i]==0)//第四个元素不为0第三个元素为0第二个元素为0第一个元素为0
					{//11
						;
					}//11
					else//第四个元素不为0第三个元素为0第二个元素为0第一个元素不为0
					{//11 11
						*(p[i] + 2) = *p[i];
						*(p[i]) = 0;											//一给三一变0
					}//11 11
				}//10
				else//第四个元素不为0第三个元素为0第二个元素不为0
				{//10 10
					*(p[i] + 2) = *(p[i] + 1);
					*(p[i] + 1) = 0;									//二给三二变0
					if(*(p[i])==0)//第四个元素不为0第三个元素为0第二个元素不为0第一个元素为0
					{//12
						;
					}//12
					else//第四个元素不为0第三个元素为0第二个元素不为0第一个元素不为0
					{//12 12
						*(p[i] + 1) = *p[i];
						*p[i] = 0;									//一给二一变0
					}//12 12
				}//10 10
			}//9
			else//第四个元素不为0第三个元素不为0
			{//9 9
				if(*(p[i]+1)==0)//第四个元素不为0第三个元素不为0第二个元素为0
				{//13
					if(*p[i]==0)//第四个元素不为0第三个元素不为0第二个元素为0第一个元素为0
					{//14
						;
					}//14
					else//第四个元素不为0第三个元素不为0第二个元素为0第一个元素不为0
					{//14 14
						*(p[i] + 1) = *p[i];
						*p[i] = 0;									//一给二一变为0
					}//14 14
				}//13
				else//第四个元素不为0第三个元素不为0第二个元素不为0
				{//13 13
					;
				}//13 13
			}//9 9
		}//1 1
	}//0
}
int main()
{
	int i, j;
	fillD();
	
	for(i=0;i<4;i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("%d ", map[i][j]);
		}
		printf("\n");
	}
	return 0;
}